home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / gawk / gawk213b.zoo / test / calc1.awk < prev    next >
Text File  |  1991-05-22  |  997b  |  30 lines

  1. # calc1 - reverse-Polish calculator, version 1
  2. #   input:  arithmetic expressions in reverse Polish
  3. #   output: values of expressions
  4.  
  5. {   for (i = 1; i <= NF; i++)
  6.         if ($i ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$/) {
  7.             stack[++top] = $i
  8.         } else if ($i == "+" && top > 1) {
  9.             stack[top-1] += stack[top]; top--
  10.         } else if ($i == "-" && top > 1) {
  11.             stack[top-1] -= stack[top]; top--
  12.         } else if ($i == "*" && top > 1) {
  13.             stack[top-1] *= stack[top]; top--
  14.         } else if ($i == "/" && top > 1) {
  15.             stack[top-1] /= stack[top]; top--
  16.         } else if ($i == "^" && top > 1) {
  17.             stack[top-1] ^= stack[top]; top--
  18.         } else {
  19.             printf("error: cannot evaluate %s\n", $i)
  20.             top = 0
  21.             next
  22.         }
  23.     if (top == 1)
  24.         printf("\t%.8g\n", stack[top--])
  25.     else if (top > 1) {
  26.         printf("error: too many operands\n")
  27.         top = 0
  28.     }
  29. }
  30.